package Q7_10_Minesweeper;
import java.util.Scanner;
public class Game {
public enum GameState {
WON, LOST, RUNNING
}
private Board board;
private int rows;
private int columns;
private int bombs;
private GameState state;
public Game(int r, int c, int b) {
rows = r;
columns = c;
bombs = b;
state = GameState.RUNNING;
}
public boolean initialize() {
if (board == null) {
board = new Board(rows, columns, bombs);
board.printBoard(true);
return true;
} else {
System.out.println("Game has already been initialized.");
return false;
}
}
public boolean start() {
if (board == null) {
initialize();
}
return playGame();
}
public void printGameState() {
if (state == GameState.LOST) {
board.printBoard(true);
System.out.println("FAIL");
} else if (state == GameState.WON) {
board.printBoard(true);
System.out.println("WIN");
} else {
System.out.println("Number remaining: " + board.getNumRemaining());
board.printBoard(false);
}
}
private boolean playGame() {
Scanner scanner = new Scanner(System.in);
printGameState();
while (state == GameState.RUNNING) {
String input = scanner.nextLine();
if (input.equals("exit")) {
scanner.close();
return false;
}
UserPlay play = UserPlay.fromString(input);
if (play == null) {
continue;
}
UserPlayResult result = board.playFlip(play);
if (result.successfulMove()) {
state = result.getResultingState();
} else {
System.out.println("Could not flip cell (" + play.getRow() + "," + play.getColumn() + ").");
}
printGameState();
}
scanner.close();
return true;
}
}